﻿using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace picture
{
    internal class ReadInput
    {
        /// <summary>
        /// 读取文本中的画图数据
        /// </summary>
        /// <param name="str">文本字符流</param>
        public static void  Read(string str)
        {
            
            
            str = str.Replace("\r\n", "/");//换行符用斜杠代替
            string[] s_plates = str.Split('#');//以#分出每组排样结果

            for (int i = 1; i < s_plates.Length; i++)
            {//#
                PrintPattern prp = new PrintPattern();
                prp.plates = new List<List<List<int[]>>>();//所有的排样方式
                
                string[] s_plate = s_plates[i].Split('!');//以!分出一组排样结果的每种排样方式  
                prp.str = s_plate[0];//排样规格说明
                prp.str2 = s_plate[s_plate.Length - 1];//排样的计算结果            
                //排样方式                        
                for (int j = 1; j < s_plate.Length-1;j++)
                {//!
                    prp.plate = new List<List<int[]>>();//一种排样方式

                    string[] plate = s_plate[j].Split('/');//一个排样方式的数据
                    prp.ellipses = new List<int[]>();//所有椭圆的数据
                    prp.lines = new List<int[]>();//所有直线的数据
                    prp.rectangles = new List<int[]>();//所有矩形的数据
                    //一个方式中的一条排
                    for (int k = 1; k < plate.Length-1; k++)
                    {
                        int[] temp=new int[6];
                        string[] shape = plate[k].Split(' ');
                        for (int m = 0; m < 6; m++)
                        {
                            temp[m] = (int)float.Parse(shape[m + 1]);
                        }
                        switch (shape[0])
                        {
                            case "1":
                                prp.rectangles.Add(temp);
                                break;
                            case "2":
                                prp.ellipses.Add(temp);
                                break;
                            case "3":
                                prp.lines.Add(temp);
                                break;
                            default:
                                break;
                        }
                    }
                    prp.plate.Add(prp.ellipses);
                    prp.plate.Add(prp.lines);
                    prp.plate.Add(prp.rectangles);
                    prp.plates.Add(prp.plate);
                }                
                PrintPattern.pattern.Add(prp);
            }
        }
    }
}
